import CryptoJS from 'crypto-js'

// AES 加密密钥
const AES_KEY = 'your-secret-key-16' // 16位密钥
const AES_IV = 'your-iv-16-chars'    // 16位初始向量

export class CryptoUtil {
    /**
     * MD5加密
     * @param text 要加密的文本
     * @returns 加密后的字符串
     */
    static md5(text: string): string {
        return CryptoJS.MD5(text).toString()
    }

    /**
     * AES加密
     * @param text 要加密的文本
     * @returns 加密后的字符串
     */
    static aesEncrypt(text: string): string {
        const key = CryptoJS.enc.Utf8.parse(AES_KEY)
        const iv = CryptoJS.enc.Utf8.parse(AES_IV)
        const encrypted = CryptoJS.AES.encrypt(text, key, {
            iv: iv,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        })
        return encrypted.toString()
    }

    /**
     * AES解密
     * @param text 要解密的文本
     * @returns 解密后的字符串
     */
    static aesDecrypt(text: string): string {
        const key = CryptoJS.enc.Utf8.parse(AES_KEY)
        const iv = CryptoJS.enc.Utf8.parse(AES_IV)
        const decrypted = CryptoJS.AES.decrypt(text, key, {
            iv: iv,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        })
        return decrypted.toString(CryptoJS.enc.Utf8)
    }

    /**
     * Base64编码
     * @param text 要编码的文本
     * @returns 编码后的字符串
     */
    static base64Encode(text: string): string {
        return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(text))
    }

    /**
     * Base64解码
     * @param text 要解码的文本
     * @returns 解码后的字符串
     */
    static base64Decode(text: string): string {
        return CryptoJS.enc.Base64.parse(text).toString(CryptoJS.enc.Utf8)
    }

    /**
     * SHA256加密
     * @param text 要加密的文本
     * @returns 加密后的字符串
     */
    static sha256(text: string): string {
        return CryptoJS.SHA256(text).toString()
    }
} 